<template>
  <div class="contarner-page" @click.stop="showLanguageHandel">
    <page-header ref="languageRef"></page-header>
    <main>
      <div class="downloader flex_ccenter" v-if="!success">
        <div class="container">
          <div class="banner-heading flex_ccenter">
            <div class="heading-item">
              <h1 class="title fw700 f-42 c-fff">인스타그램 스토리 다운로드</h1>
              <h2 class="sub c-fff f-18 fw400">
                최고의 Instagram 스토리 다운로더 무료
              </h2>
            </div>
          </div>
          <div class="form flex_center">
            <div class="input-box flex_between">
              <!-- <input
                    type="text"
                    class="input f-18"
                    v-model="input"
                    @input="handleInput"
                    @paste="handleInput"
                    placeholder="Paste URL Instagram"
                    list="fruits"
                    name="fruit"
                  />
                  <datalist id="fruits">
                    <option value="Apple"></option>
                    <option value="Banana"></option>
                    <option value="Cherry"></option>
                  </datalist> -->
              <input
                type="text"
                class="input f-18"
                v-model="input"
                :disabled="isHttpLoading"
                @input="handleInput"
                @paste="handleInput"
                @keydown="sendDownload($event)"
                placeholder="Paste URL Instagram"
              />
              <div
                class="Paste shou flex_center"
                @click="handleClickPasted"
                v-if="input == ''"
              >
                <div class="btnbg"></div>
                <div class="f-16 c-000 fw700">Paste</div>
              </div>
              <div
                class="clear shou flex_center"
                v-if="input != '' && !isHttpLoading"
                @click.stop="input = ''"
              >
                <div class="btnbg"></div>
                <div class="f-16 c-000 fw700">Clear</div>
              </div>
            </div>
            <div
              v-if="!isHttpLoading"
              @click.stop="downloadHandel"
              class="submit shou fw700 c-fff flex_center"
            >
              Download
            </div>
            <div v-else class="submit shou fw700 c-fff flex_center">
              Please wait
            </div>
          </div>
          <div class="app-submit flex_ccenter">
            <div
              class="submit flex_center"
              v-if="!isHttpLoading"
              @click.stop="downloadHandel"
            >
              <div class="fw700 c-fff f-21">Download</div>
            </div>
            <div class="submit flex_center" v-else>
              <div class="fw700 c-fff f-21">Please wait</div>
            </div>
          </div>
          <div class="loading" v-if="isHttpLoading">
            <div class="loading-dots flex_center">
              <div class="dot"></div>
              <div class="dot"></div>
              <div class="dot"></div>
              <div class="dot"></div>
            </div>
            <div class="tips f-18 flex_center">
              <div>데이터를 검색하는 중입니다. 잠시만 기다려주세요!</div>
            </div>
          </div>
          <div class="error flex_ccenter" v-if="httpError1">
            <div class="hono flex_">
              <div class="error-img"></div>
              <div class="error-img"></div>
              <div class="error-img"></div>
            </div>
            <div class="errMsg f-18">
              해당 사이트는 비공개이기 때문에 귀하의 링크를 처리할 수 없습니다
            </div>
          </div>
          <div class="error flex_ccenter" v-if="httpError2">
            <div class="hono flex_">
              <div class="error-img"></div>
              <div class="error-img"></div>
              <div class="error-img"></div>
            </div>
            <div class="errMsg f-18">
              입력한 데이터는 링크가 아닙니다. 유효한 링크를 입력하세요. 예:
              <div>https://www.instagram.com/reel/Cml9qu-ISqx</div>
            </div>
          </div>
        </div>
      </div>
      <!-- 广告位start -->
      <!-- 广告位end -->
      <div class="container" v-if="!success">
        <div class="body-content">
          <div class="app-box">
            <div class="app-box__info">
              <h3 class="app-box__title f-21 fw700 c-000">
                앱 Insta 다운로더로 다운로드
              </h3>
              <p class="f-16 c-ccc">
                우리 앱은 인스타그램 비디오를 다운로드할 수 있는 빠르고 간단한
                솔루션을 제공하며 워터마크 없이 HD 품질의 비디오를 제공합니다.
              </p>
            </div>
            <div class="app-link">
              <a 
                  target="_blank" href="https://play.google.com/store/apps/details?id=ins.freevideodownload.pro">
                <img src="/static/images/google-play.webp" alt="Download app " />
              </a>
              <a href="https://apps.apple.com/us/app/repost-for-video-save-story/id6462401460"  target="_blank">
                <img src="/static/images/IOS.webp" alt="Download app " />
              </a>
            </div>
          </div>
          <div class="quick-info">
            <h3 class="f-32 c-000">Savinginsta로 Instagram 스토리 다운로드</h3>
            <p class="f-16 c-ccc">
              Savinginsta.Com은 최고의 Instagram 스토리 다운로더로 알려져
              있습니다. 사용하기 쉽고 고품질 인스타그램을 다운로드할 수 있는
              기능 때문에 가장 빠른 속도로 이야기를 전달합니다. 인스타그램
              스토리를 귀하의 계정에 다운로드하세요 Instagram을 사용하여 휴대폰,
              PC 또는 태블릿에서 최고 품질로 브라우저에서 직접 비디오 다운로더.
              소프트웨어 없음 설치가 필요하며, 안드로이드와 iOS를 모두
              지원합니다.
            </p>
          </div>
          <div class="quick-info">
            <h3 class="f-32 c-000">
              Instagram 스토리 다운로드에 Savinginsta를 사용하는 이유는
              무엇입니까?
            </h3>
            <p class="f-16 c-ccc">
              매력적인 사진과 영상으로 가득한 인스타그램 스토리는 디지털 표현의
              중요한 부분이지만 눈으로만 볼 수 있습니다. 24시간 동안. Instagram
              Stories 보기를 좋아하고 보고 싶다면 다운로드하세요. Savinginsta가
              도와드리겠습니다. 간단히 입력하세요. Instagram Story URL을
              Savinginsta에 연결하고 가장 좋은 것을 다운로드하세요. 인스타그램
              스토리를 무료로 이용해보세요.
            </p>
          </div>
          <div class="how">
            <div class="how-title">
              <h3 class="f-36 c-000 italic">
                비디오 인스타그램 스토리를 다운로드하는 방법?
              </h3>
            </div>
            <div class="steps">
              <div class="step">
                <div class="one">
                  <span class="fw700 c-blue f-16">01단계:</span>
                  <span class="f-16 c-000">
                    스토리를 전달하고 싶은 Instagram 사용자 이름을 입력하세요.
                     Savinginsta.App에 다운로드하세요.</span
                  >
                </div>
              </div>
              <div class="step">
                <span class="fw700 c-blue f-16">단계02:</span>
                <span class="f-16 c-000">
                  다운로드하려는 스토리를 선택하세요.</span
                >
              </div>
              <div class="step">
                <span class="fw700 c-blue f-16">03단계:</span>
                <span class="f-16 c-000"
                  >동영상 Instagram 스토리를 저장하려면 '다운로드'를 클릭하세요.
                   장치.</span
                >
              </div>
            </div>
          </div>
          <div class="features c-fff">
            <h3 class="h3 fw700 f-21">
              Insta Story를 휴대폰에 다운로드하는 방법은 무엇입니까?
            </h3>
            <div class="attributes-list">
              <div class="features-title">
                다운로드는 매우 쉽습니다. 자세한 가이드는 다음과 같습니다.
              </div>
              <div class="item flex_">
                <div class="bgimg"></div>
                <div class="f-14 c-fff">
                  Chrome, Firefox 등의 브라우저에서 Instagram을 엽니다.
                   인스타그램 앱.
                </div>
              </div>
              <div class="item flex_">
                <div class="bgimg"></div>
                <div class="f-14 c-fff">마음에 드는 이야기를 선택하세요.</div>
              </div>
              <div class="item flex_">
                <div class="bgimg"></div>
                <div class="f-14 c-fff">
                  다운로드하려는 비디오를 클릭하십시오.
                </div>
              </div>
              <div class="item flex_">
                <div class="bgimg"></div>
                <div class="f-14 c-fff">
                  주소 표시줄에서 스토리 URL을 복사하세요.
                </div>
              </div>
              <div class="item flex_">
                <div class="bgimg"></div>
                <div class="f-14 c-fff">
                  Savinginsta의 주소 상자에 사용자 이름을 붙여넣습니다.
                </div>
              </div>
              <div class="item flex_">
                <div class="bgimg"></div>
                <div class="f-14 c-fff">
                  인스타그램 스토리를 온라인으로 다운로드하려면 '다운로드'를 누르세요.
                </div>
              </div>
              <div class="item flex_">
                <div class="bgimg"></div>
                <div class="f-14 c-fff">
                  다운로드한 IG 스토리 사진 또는 비디오가 이제 폴더에 있습니다.
                </div>
              </div>
            </div>
          </div>
          <div class="how">
            <div class="how-title">
              <h3 class="f-36 c-000 italic">
                Instagram 스토리와 하이라이트를 온라인으로 다운로드하는 방법은 무엇입니까?
              </h3>
            </div>
            <div class="steps">
              <div class="step">
                <div class="one">
                  <span class="f-16 c-000"
                    >인스타그램 스토리에서 링크를 얻거나
                     다운로드하려는 Instagram 계정의 사용자 이름
                     에서.</span
                  >
                </div>
              </div>
              <div class="step">
                <span class="f-16 c-000"
                  >Savinginsta - Insta Story 다운로더로 이동하여
                   도구 모음에 스토리 링크를 추가하세요.
                </span>
              </div>
              <div class="step">
                <span class="f-16 c-000"
                  >화면에 표시된 스토리를 선택하고 스토리를 선택하세요.
                   다운로드하고 싶은 항목을 선택하고 '다운로드'를 누르세요.</span
                >
              </div>
            </div>
          </div>
          <div class="quick-info">
            <h3 class="f-32 c-000">
              Savinginsta.Com을 최고의 Instagram(IG) 스토리로 만드는 이유
               도구?
            </h3>
            <ul class="f-16 c-ccc">
              <li>사용자 친화적이고 가장 빠른 도구입니다.</li>
              <li>최고의 서비스를 제공하기 위해 지속적인 업데이트가 이루어집니다.</li>
              <li>
                완전 무료! 우리는 최소한의 노력을 통해 우리의 발전을 지원합니다.
                 광고하는.
              </li>
            </ul>
          </div>
          <div class="faq-section">
            <h3 class="faq-title f-36 c-000 italic">FAQ</h3>
            <div class="accordion">
              <div
                id="faq"
                itemscope="itemscope"
                itemtype="https://schema.org/FAQPage"
              >
                <div
                  itemprop="mainEntity"
                  itemscope="itemscope"
                  itemtype="https://schema.org/Question"
                  class="accordion-item"
                  :key="k"
                  v-for="(item, k) in faqList"
                >
                  <h4 itemprop="name" class="accordion-title fw700 f-16">
                    {{ item.title }}
                  </h4>
                  <div
                    itemprop="acceptedAnswer"
                    itemscope=""
                    itemtype="https://schema.org/Answer"
                  >
                    <div
                      itemprop="text"
                      class="accordion-text f-16 c-ccc fw400"
                    >
                      {{ item.content }}
                    </div>
                  </div>
                </div>
              </div>
            </div>
          </div>
        </div>
      </div>
      <!-- 解析结果 start -->
      <div class="container" v-if="success">
        <success-content
          @refresh="refresh"
          :list="successList"
        ></success-content>
      </div>
      <!-- 解析结果 end -->
    </main>
    <footer>
      <div class="container">
        <div class="footer-content">
          <div class="footer-link">
            <div class="row flex_between">
              <div class="col-12">
                <div class="link-label fw700 c-000 f-21">도구</div>
                <ul class="list-unstyled c-ccc f-16">
                  <li>
                    <nuxt-link to="/ko/instagram-story-download" 
                      >인스타그램 스토리 다운로더</nuxt-link
                    >
                  </li>
                  <li>
                    <nuxt-link to="/ko/instagram-reels-video-download" 
                      >인스타그램 릴 다운로더</nuxt-link
                    >
                  </li>
                  <li>
                    <a href="https://savingtik.com/" target="_blank"
                      >틱톡 다운로더</a
                    >
                  </li>
                </ul>
              </div>
              <div class="col-6">
                <div class="link-label fw700 c-000 f-21">지원하다</div>
                <ul class="list-unstyled c-ccc f-16">
                  <li>
                    <nuxt-link to="/contact"> 연락하다 </nuxt-link>
                  </li>
                  <li>
                    <nuxt-link to="/blog"> Blog </nuxt-link>
                  </li>
                </ul>
              </div>
              <div class="col-6">
                <div class="link-label fw700 c-000 f-21">합법적인</div>
                <ul class="list-unstyled c-ccc f-16">
                  <li>
                    <nuxt-link to="/terms-of-service">
                      서비스 약관
                    </nuxt-link>
                  </li>
                  <li>
                    <nuxt-link to="/privacy-policy"> 개인 정보 정책 </nuxt-link>
                  </li>
                </ul>
              </div>
            </div>
          </div>
          <div class="copyright flex_ccenter">
            <b class="fw700 f-21 c-000"
              >저희는 인스타그램이나 메타와 관련이 없습니다</b
            >
            <div class="c-ccc f-16">
                © {{new Date().getFullYear()}} Insta Downloader All rights reserved.
            </div>
          </div>
        </div>
      </div>
    </footer>
  </div>
</template>
    
    <script>
import { mapState, mapGetters, mapMutations } from "vuex";
import pageHeader from "~/components/page-header.vue";
import SuccessContent from "~/components/success-content.vue";
import CryptoJS from "crypto-js";
import { handleClick, checkString } from "@/plugins/Firebase.js";
export default {
  components: { pageHeader, SuccessContent },
  head: {
    htmlAttrs: {
      lang: "ko",
    },
    bodyAttrs: {
      "data-lang": "ko",
    },
    title: "최고의 무료 인스타그램 스토리 다운로더",
    meta: [
      { property: "og:locale", content: "ko" },
      //Page Information
      {
        name: "description",
        content:
          "Savinginsta Instagram Downloader를 무료로 사용하면 Instagram 스토리를 쉽게 온라인으로 다운로드할 수 있습니다. 광고 없이 고품질 Instagram 스토리를 컴퓨터나 휴대폰에 직접 저장하세요.워터마크 없음",
      },

      //Schema.org Microdata
      {
        itemprop: "name",
        content: "최고의 무료 인스타그램 스토리 다운로더",
      },

      // Facebook / OpenGraph
      {
        property: "og:title",
        content: "최고의 무료 인스타그램 스토리 다운로더",
      },
      { property: "og:type", content: "website" },
      { property: "og:url", content: "https://savinginsta.com/ko/instagram-story-download" },

      {
        property: "og:description",
        content:
          "Savinginsta Instagram Downloader를 무료로 사용하면 Instagram 스토리를 쉽게 온라인으로 다운로드할 수 있습니다. 광고 없이 고품질 Instagram 스토리를 컴퓨터나 휴대폰에 직접 저장하세요.워터마크 없음",
      },
      //Twitter
      { name: "twitter:card", content: "summary" },
      { name: "twitter:url", content: "https://savinginsta.com/ko/instagram-story-download" },
      {
        name: "twitter:title",
        content: "최고의 무료 인스타그램 스토리 다운로더",
      },
      {
        name: "twitter:description",
        content:
          "Savinginsta Instagram Downloader를 무료로 사용하면 Instagram 스토리를 쉽게 온라인으로 다운로드할 수 있습니다. 광고 없이 고품질 Instagram 스토리를 컴퓨터나 휴대폰에 직접 저장하세요.워터마크 없음",
      },
      //multilingual
      {
        name: "google",
        content: "notranslate",
      },
    ],
    link: [
      //multilingual
      {
        rel: "alternate",
        hreflang: "x-default",
        href: "https://savinginsta.com/ko/instagram-story-download",
      },
      {
        rel: "alternate",
        hreflang: "en",
        href: "https://savinginsta.com/instagram-story-download",
      },
      {
        rel: "alternate",
        hreflang: "en-in",
        href: "https://savinginsta.com/in/instagram-story-download",
      },
      {
        rel: "alternate",
        hreflang: "vi",
        href: "https://savinginsta.com/vn/instagram-story-download",
      },
      {
        rel: "alternate",
        hreflang: "tr",
        href: "https://savinginsta.com/tr/instagram-story-download",
      },
      {
        rel: "alternate",
        hreflang: "id",
        href: "https://savinginsta.com/id/instagram-story-download",
      },
      {
        rel: "alternate",
        hreflang: "fr",
        href: "https://savinginsta.com/fr/instagram-story-download",
      },
      {
        rel: "alternate",
        hreflang: "pt",
        href: "https://savinginsta.com/pt/instagram-story-download",
      },
      {
        rel: "alternate",
        hreflang: "ru",
        href: "https://savinginsta.com/ru/instagram-story-download",
      },
      {
        rel: "alternate",
        hreflang: "es",
        href: "https://savinginsta.com/es/instagram-story-download",
      },
      {
        rel: "alternate",
        hreflang: "ms",
        href: "https://savinginsta.com/ms/instagram-story-download",
      },
      {
        rel: "alternate",
        hreflang: "ko",
        href: "https://savinginsta.com/ko/instagram-story-download",
      },
      {
        rel: "alternate",
        hreflang: "ja",
        href: "https://savinginsta.com/ja/instagram-story-download",
      },
      {
        rel: "alternate",
        hreflang: "jv",
        href: "https://savinginsta.com/jv/instagram-story-download",
      },
      {
        rel: "alternate",
        hreflang: "cs",
        href: "https://savinginsta.com/cs/instagram-story-download",
      },
      {
        rel: "alternate",
        hreflang: "de",
        href: "https://savinginsta.com/de/instagram-story-download",
      },
      {
        rel: "alternate",
        hreflang: "it",
        href: "https://savinginsta.com/it/instagram-story-download",
      },
      {
        rel: "alternate",
        hreflang: "pl",
        href: "https://savinginsta.com/pl/instagram-story-download",
      },
      {
        rel: "alternate",
        hreflang: "hu",
        href: "https://savinginsta.com/hu/instagram-story-download",
      },
      {
        rel: "alternate",
        hreflang: "nl",
        href: "https://savinginsta.com/nl/instagram-story-download",
      },
      {
        rel: "alternate",
        hreflang: "ro",
        href: "https://savinginsta.com/ro/instagram-story-download",
      },
      {
        rel: "alternate",
        hreflang: "el",
        href: "https://savinginsta.com/el/instagram-story-download",
      },
      {
        rel: "canonical",
        href: "https://savinginsta.com/ko/instagram-story-download",
      },
    ],
    script: [
      {
        json: {
          "@context": "http://schema.org",
          "@graph": [
            {
              "@type": "WebSite",
              name: "Savinginsta",
              alternateName: "Instagram downloader",
              url: "https://savinginsta.com",
            },
            {
              "@type": "WebPage",
              name: "최고의 무료 인스타그램 스토리 다운로더 - Savinginsta", //title
              inLanguage: "ko", //语种
              description:
                "Savinginsta Instagram Downloader를 무료로 사용하면 Instagram 스토리를 쉽게 온라인으로 다운로드할 수 있습니다. 광고 없이 고품질 Instagram 스토리를 컴퓨터나 휴대폰에 직접 저장하세요.워터마크 없음.", //元描述
              image: "https://savinginsta.com/static/images/savinginsta_thumbnail.jpg", //绝对路径
              url: "https://savinginsta.com/ko/instagram-story-download", //当前url
            },
          ],
        },
        type: "application/ld+json",
      },
    ],
  },
  data() {
    return {
      input: "",
      success: false,
      isHttpLoading: false,
      httpError1: false,
      httpError2: false,
      current: 0,
      successList: [],
      faqList: [
        {
          title: `인스타그램 스토리 다운로더란 무엇입니까?`,
          content: `등록 없이 Instagram Stories를 쉽게 다운로드할 수 있는 무료 도구입니다.`,
        },
        {
          title: `비디오 인스타그램 스토리를 다운로드하는 방법?`,
          content: `Savinginsta에서 Instagram 스토리를 빠르게 다운로드하려면 위의 간단한 지침을 따르세요.`,
        },
        {
          title: `Instagram에서 하이라이트를 어떻게 다운로드할 수 있나요?`,
          content: `Instagram 하이라이트를 다운로드하려면 계정이 공개되어 있어야 합니다. Savinginsta.app에 사용자 이름을 입력하고 '다운로드'를 클릭하세요.`,
        },
        {
          title: `IG 스토리를 익명으로 보고 싶다면 어떻게 해야 하나요?`,
          content: `완벽한 솔루션이 있습니다: 익명의 인스타그램 스토리 뷰어 인스타그램 스토리 뷰어.`,
        },
        {
          title: `Instagram 계정으로 로그인해야 합니까?`,
          content: `로그인이 필요하지 않습니다. Savinginsta는 개인 정보를 요구하지 않으므로 안전하고 익명의 다운로드가 보장됩니다.`,
        },
        {
          title: `Instagram에 직접 동영상을 저장할 수 있나요?`,
          content: `네, 하지만 영상이 끝날 때까지 기다려야 합니다.`,
        },
        {
          title: `웹사이트는 Insta에서 컴퓨터용 다운로드를 지원합니까?`,
          content: `물론, PC에서 비디오, 사진, 스토리 등을 다운로드할 수 있습니다. 참조: PC의 Insta에서 다운로드.`,
        },
        {
          title: `Android용 Instagram Story를 다운로드할 수 있나요?`,
          content: `예, 게시물 링크를 복사하여 웹사이트 상자에 붙여넣고 저장하세요. 더 많은 정보를 원하시면: Android의 Insta에서 다운로드하세요.`,
        },
        {
          title: `iPhone에서 Story Instagram 비디오 및 사진을 다운로드하는 방법은 무엇입니까?`,
          content: `Android만큼 쉽습니다. iOS용 Instagram 다운로드 스토리 가이드를 확인하세요.`,
        },
        {
          title: `저장된 스토리 비디오를 컴퓨터에서 어디에서 찾을 수 있나요?`,
          content: `Windows의 경우 Ctrl+J, Mac의 경우 Shift+Command+J를 사용하여 브라우저의 다운로드 기록을 확인하세요.`,
        },
      ],
    };
  },
  computed: {
    ...mapGetters(["language"]),
  },
  mounted() {
    this.debouncedDownInput = this.debounce(this.downInput, 1000);
  },
  methods: {
    async downloadHandel() {
      if (this.isHttpLoading || this.input === "") return;
      this.isHttpLoading = false;
      this.httpError1 = false;
      this.httpError2 = false;
      this.input = this.input.replace(/^.*\s?https:\/\//, "https://");
      const insUrlPattern = new RegExp("^http(s|)://.*instagram.com.*/.*$");
      let type = checkString(this.input);
      if (!insUrlPattern.test(this.input)) {
        //点击解析下载按钮
        handleClick("action_ins_detect_boinsom", {
          site: "other",
          noislink: this.input,
          from: "story",
          type: type,
        });
        this.httpError2 = true;
        this.isHttpLoading = false;
        return;
      }
      //点击解析下载按钮
      handleClick("action_ins_detect_boinsom", {
        site: "other",
        from: "story",
        type: type,
      });
      //开始解析  ins_start_resolve
      handleClick("ins_start_resolve", {
        islink: this.input,
        from: "story",
        type: type,
      });
      this.isHttpLoading = true;
      try {
        let result = this.uki(this.input);
        const response = await fetch(
          "https://savinginsta.com/api/downloader/analysis",
          {
            method: "POST",
            headers: { "Content-Type": "application/json" },
            body: JSON.stringify({
              path: result,
            }),
          }
        );
        let encryptedResponse = await response.text();
        let parse = JSON.parse(encryptedResponse);
        if (parse.code != 200) {
          // 解析失败  ins_resolve_fail
          handleClick("ins_resolve_fail", {
            reason: "Failed to fetch",
            islink: this.input,
            from: "story",
            type: type,
          });
          this.httpError1 = true;
          this.isHttpLoading = false;
          return;
        } else {
          //解析成功  ins_resolve_success
          handleClick("ins_resolve_success", {
            type: type,
            from: "story",
          });
          let decryptedResponse = await this.eki(parse.data); // 使用你的解密函数
          this.successList = JSON.parse(decryptedResponse);
          this.success = true;
          this.isHttpLoading = false;
        }
      } catch (error) {
        // 解析失败  ins_resolve_fail
        handleClick("ins_resolve_fail", {
          reason: "Failed to fetch",
          islink: this.input,
          from: "story",
          type: type,
        });
        console.error(error);
        this.httpError1 = true;
        this.isHttpLoading = false;
      }
    },

    uki(input) {
      let CIPHER_ALGORITHM = "DES-CBC";
      let IV_SIZE = 8;
       
      
  try {
        const complexKey = [
          process.env.part1,
          process.env.part2,
          process.env.part3,
          process.env.part4,
          process.env.part5,
          process.env.part6,
          process.env.part7,
          process.env.part8,
        ].join("");
        const keyBytes = CryptoJS.enc.Utf8.parse(complexKey);
        const inputBytes = CryptoJS.enc.Utf8.parse(input);
        const ivBytes = CryptoJS.lib.WordArray.random(IV_SIZE);
        const encrypted = CryptoJS.DES.encrypt(inputBytes, keyBytes, {
          iv: ivBytes,
          mode: CryptoJS.mode.CBC,
          padding: CryptoJS.pad.Pkcs7,
        });
        const ciphertext = ivBytes.concat(encrypted.ciphertext);
        return ciphertext.toString();
      } catch (error) {
        console.error(error);
        return null;
      }
    },
    eki(cipherText) {
      let CIPHER_ALGORITHM = "DES-CBC";
      let IV_SIZE = 8;
       
      const complexKey = [
          process.env.part1,
          process.env.part2,
          process.env.part3,
          process.env.part4,
          process.env.part5,
          process.env.part6,
          process.env.part7,
          process.env.part8,
        ].join("");
      try {
        let keyBytes = CryptoJS.enc.Utf8.parse(
          complexKey.padEnd(CIPHER_ALGORITHM === "DES-CBC" ? 8 : 16)
        );
        let ivBytes = { iv: CryptoJS.enc.Hex.parse(process.env.DES_IV) }; // 如果使用CBC模式，需要一个初始化向量iv，这里是空向量
        let decrypted = CryptoJS.DES.decrypt(
          { ciphertext: CryptoJS.enc.Hex.parse(cipherText) },
          keyBytes,
          ivBytes
        );
        return decrypted.toString(CryptoJS.enc.Utf8);
      } catch (e) {
        console.error(e);
        return null;
      }
    },
    sendDownload(event) {
      if (event.keyCode === 13 && !this.isHttpLoading) {
        this.downloadHandel();
        event.preventDefault();
        return false;
      }
    },
    changeTab(k) {
      this.current = k;
    },
    handleInput(e) {
      this.debouncedDownInput(e);
    },
    debounce(fn, delay) {
      let timer;
      return function () {
        let context = this;
        let args = arguments;
        clearTimeout(timer);
        timer = setTimeout(() => {
          fn.apply(context, args);
        }, delay);
      };
    },
    downInput(e) {
      let type = checkString(e.target.value);
      // 粘贴链接到输入框 action_ins_paste
      handleClick("action_ins_paste", {
        islink: e.target.value,
        from: "story",
        type: type,
      });
    },
    handleClickPasted() {
      if (!navigator.clipboard) {
        console.log("Clipboard API not available");
        return;
      }
      navigator.clipboard
        .readText()
        .then((text) => {
          this.input = text;
          let type = checkString(text);
          // 粘贴链接到输入框 action_ins_paste
          handleClick("action_ins_paste", {
            islink: text,
            from: "story",
            type: type,
          });
        })
        .catch((err) => {
          console.error("Failed to read clipboard contents: ", err);
        });
    },
    showLanguageHandel() {
      this.$refs.languageRef.close();
    },
    refresh() {
      this.success = false;
      this.input = "";
      this.successList = [];
    },
  },
};
</script>
    <style lang="scss" scoped>
 @import "@/static/style/story.css";
.loading {
  .loading-dots {
    position: relative;
    z-index: 999;
    margin-top: 70px;
  }

  .dot {
    background-color: #ffffff;
    width: 12px;
    height: 12px;
    border-radius: 50%;
    margin: 0 10px;
    animation: loading-animation 1.5s infinite;
  }

  .dot:nth-child(2) {
    animation-delay: 0.5s;
  }

  .dot:nth-child(3) {
    animation-delay: 0.8s;
  }
  .dot:nth-child(4) {
    animation-delay: 1s;
  }
}
@keyframes loading-animation {
  0%,
  50%,
  80%,
  100% {
    transform: scale(1);
  }
  40% {
    transform: scale(1.5);
  }
}
@media (max-width: 768px) {
  .loading {
    .loading-dots {
      margin-top: 26px !important;
    }
    .dot {
      width: 8px !important;
      height: 8px !important;
    }
  }
}
</style>
    